<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
    <title>Reference</title>
    <link rel="stylesheet" href="../ldoc.css" type="text/css" />
</head>
<body>

<div id="container">

<div id="product">
	<div id="product_logo"></div>
	<div id="product_name"><big><b></b></big></div>
	<div id="product_description"></div>
</div> <!-- id="product" -->


<div id="main">


<!-- Menu -->

<div id="navigation">
<br/>
<h1>Duplex</h1>

<ul>
  <li><a href="../index.html">Index</a></li>
</ul>

<h2>Contents</h2>
<ul>
<li><a href="#Functions">Functions</a></li>
<li><a href="#Fields">Fields</a></li>
</ul>


<h2>Modules</h2>
<ul class="$(kind=='Topics' and '' or 'nowrap'">
  <li><a href="../modules/Duplex.Application.html">Duplex.Application</a></li>
  <li><strong>Duplex.Applications.Effect</strong></li>
  <li><a href="../modules/Duplex.Applications.GridPie.html">Duplex.Applications.GridPie</a></li>
  <li><a href="../modules/Duplex.Applications.Hydra.html">Duplex.Applications.Hydra</a></li>
  <li><a href="../modules/Duplex.Applications.Instrument.html">Duplex.Applications.Instrument</a></li>
  <li><a href="../modules/Duplex.Applications.Keyboard.GridLayout.html">Duplex.Applications.Keyboard.GridLayout</a></li>
  <li><a href="../modules/Duplex.Applications.Keyboard.Layouts.HarmonicLayout.html">Duplex.Applications.Keyboard.Layouts.HarmonicLayout</a></li>
  <li><a href="../modules/Duplex.Applications.Keyboard.Layouts.IsomorphicLayout.html">Duplex.Applications.Keyboard.Layouts.IsomorphicLayout</a></li>
  <li><a href="../modules/Duplex.Applications.Keyboard.Layouts.PianoLayout.html">Duplex.Applications.Keyboard.Layouts.PianoLayout</a></li>
  <li><a href="../modules/Duplex.Applications.Keyboard.html">Duplex.Applications.Keyboard</a></li>
  <li><a href="../modules/Duplex.Applications.Matrix.html">Duplex.Applications.Matrix</a></li>
  <li><a href="../modules/Duplex.Applications.Metronome.html">Duplex.Applications.Metronome</a></li>
  <li><a href="../modules/Duplex.Applications.MidiActions.Bindings.html">Duplex.Applications.MidiActions.Bindings</a></li>
  <li><a href="../modules/Duplex.Applications.MidiActions.html">Duplex.Applications.MidiActions</a></li>
  <li><a href="../modules/Duplex.Applications.Mixer.html">Duplex.Applications.Mixer</a></li>
  <li><a href="../modules/Duplex.Applications.Mlrx.Mlrx_group.html">Duplex.Applications.Mlrx.Mlrx_group</a></li>
  <li><a href="../modules/Duplex.Applications.Mlrx.Mlrx_note.html">Duplex.Applications.Mlrx.Mlrx_note</a></li>
  <li><a href="../modules/Duplex.Applications.Mlrx.Mlrx_pos.html">Duplex.Applications.Mlrx.Mlrx_pos</a></li>
  <li><a href="../modules/Duplex.Applications.Mlrx.Mlrx_track.html">Duplex.Applications.Mlrx.Mlrx_track</a></li>
  <li><a href="../modules/Duplex.Applications.Mlrx.html">Duplex.Applications.Mlrx</a></li>
  <li><a href="../modules/Duplex.Applications.Navigator.html">Duplex.Applications.Navigator</a></li>
  <li><a href="../modules/Duplex.Applications.NotesOnWheels.html">Duplex.Applications.NotesOnWheels</a></li>
  <li><a href="../modules/Duplex.Applications.PatternCursor.html">Duplex.Applications.PatternCursor</a></li>
  <li><a href="../modules/Duplex.Applications.PatternSequence.html">Duplex.Applications.PatternSequence</a></li>
  <li><a href="../modules/Duplex.Applications.Recorder.html">Duplex.Applications.Recorder</a></li>
  <li><a href="../modules/Duplex.Applications.Repeater.html">Duplex.Applications.Repeater</a></li>
  <li><a href="../modules/Duplex.Applications.Rotate.html">Duplex.Applications.Rotate</a></li>
  <li><a href="../modules/Duplex.Applications.StepSequencer.html">Duplex.Applications.StepSequencer</a></li>
  <li><a href="../modules/Duplex.Applications.SwitchConfiguration.html">Duplex.Applications.SwitchConfiguration</a></li>
  <li><a href="../modules/Duplex.Applications.TestPad.html">Duplex.Applications.TestPad</a></li>
  <li><a href="../modules/Duplex.Applications.TrackSelector.html">Duplex.Applications.TrackSelector</a></li>
  <li><a href="../modules/Duplex.Applications.Transport.html">Duplex.Applications.Transport</a></li>
  <li><a href="../modules/Duplex.Applications.UIButtonTest.html">Duplex.Applications.UIButtonTest</a></li>
  <li><a href="../modules/Duplex.Applications.XYPad.html">Duplex.Applications.XYPad</a></li>
  <li><a href="../modules/Duplex.Automation.html">Duplex.Automation</a></li>
  <li><a href="../modules/Duplex.Browser.html">Duplex.Browser</a></li>
  <li><a href="../modules/Duplex.BrowserProcess.html">Duplex.BrowserProcess</a></li>
  <li><a href="../modules/Duplex.Canvas.html">Duplex.Canvas</a></li>
  <li><a href="../modules/Duplex.CanvasPoint.html">Duplex.CanvasPoint</a></li>
  <li><a href="../modules/Duplex.ControlMap.html">Duplex.ControlMap</a></li>
  <li><a href="../modules/Duplex.Device.html">Duplex.Device</a></li>
  <li><a href="../modules/Duplex.Display.html">Duplex.Display</a></li>
  <li><a href="../modules/Duplex.Globals.html">Duplex.Globals</a></li>
  <li><a href="../modules/Duplex.Message.html">Duplex.Message</a></li>
  <li><a href="../modules/Duplex.MessageStream.html">Duplex.MessageStream</a></li>
  <li><a href="../modules/Duplex.MidiDevice.html">Duplex.MidiDevice</a></li>
  <li><a href="../modules/Duplex.OscClient.html">Duplex.OscClient</a></li>
  <li><a href="../modules/Duplex.OscDevice.html">Duplex.OscDevice</a></li>
  <li><a href="../modules/Duplex.OscVoiceMgr.html">Duplex.OscVoiceMgr</a></li>
  <li><a href="../modules/Duplex.Preferences.html">Duplex.Preferences</a></li>
  <li><a href="../modules/Duplex.ProcessSlicer.html">Duplex.ProcessSlicer</a></li>
  <li><a href="../modules/Duplex.RoamingDSP.html">Duplex.RoamingDSP</a></li>
  <li><a href="../modules/Duplex.Scheduler.html">Duplex.Scheduler</a></li>
  <li><a href="../modules/Duplex.StateController.html">Duplex.StateController</a></li>
  <li><a href="../modules/Duplex.UIButton.html">Duplex.UIButton</a></li>
  <li><a href="../modules/Duplex.UIButtonStrip.html">Duplex.UIButtonStrip</a></li>
  <li><a href="../modules/Duplex.UIComponent.html">Duplex.UIComponent</a></li>
  <li><a href="../modules/Duplex.UIKey.html">Duplex.UIKey</a></li>
  <li><a href="../modules/Duplex.UIKeyPressure.html">Duplex.UIKeyPressure</a></li>
  <li><a href="../modules/Duplex.UILabel.html">Duplex.UILabel</a></li>
  <li><a href="../modules/Duplex.UIPad.html">Duplex.UIPad</a></li>
  <li><a href="../modules/Duplex.UIPitchBend.html">Duplex.UIPitchBend</a></li>
  <li><a href="../modules/Duplex.UISlider.html">Duplex.UISlider</a></li>
  <li><a href="../modules/Duplex.UISpinner.html">Duplex.UISpinner</a></li>
  <li><a href="../modules/Duplex.WidgetHooks.html">Duplex.WidgetHooks</a></li>
  <li><a href="../modules/Duplex.WidgetKeyboard.html">Duplex.WidgetKeyboard</a></li>
  <li><a href="../modules/Duplex.html">Duplex</a></li>
  <li><a href="../modules/main.html">main</a></li>
</ul>

</div>

<div id="content">

<h1>Module <code>Duplex.Applications.Effect</code></h1>
<p>The Effect application enables control of DSP chain parameters.</p>
<p>

<p>Inheritance: <a href="../modules/Duplex.Application.html#">Duplex.Application</a> > Duplex.Application.Effect </p>

<h3>Features</h3>

<ul>
    <li>Using a paged navigation mechanism </li>
    <li>Access every parameter of every effect device (including plugins)</li>
    <li>Flip through parameters using paged navigation</li>
    <li>Select between devices using a number of fixed buttons</li>
    <li>Enable grid-controller mode by assigning "parameters" to a grid</li>
    <li>Parameter subsets make it possible to control only certain values</li>
    <li>Supports automation recording (touch or latch mode)</li>
</ul>

<h3>Changes</h3>

<p>  0.98.27</p>
<pre><code>- New mapping: “device_name” (UILabel)
- New mappings: “param_names”,”param_values” (UILabels for parameters)
- New mappings: “param_next”,”param_next” (UIButtons, replaces UISpinner)
</code></pre>

<p>  0.98.19</p>
<pre><code>- Fixed: device-navigator now works after switching song/document
</code></pre>

<p>  0.98  </p>
<pre><code>- Support for automation recording
- New mapping: select device via knob/slider
- New mappings: previous/next device
- New mappings: previous/next preset
</code></pre>

<p>  0.97  </p>
<pre><code>- Better performance, as UI updates now happen in idle loop
- Option to include parameters based on criteria
  ALL/MIXER/AUTOMATED_PARAMETERS
</code></pre>

<p>  0.95  </p>
<pre><code>- Grid controller support (with configurations for Launchpad, etc)
- Seperated device-navigator group size from parameter group size
- Use standard (customizable) palette instead of hard-coded values
- Applied feedback fix, additional check for invalid meta-device values
</code></pre>

<p>  0.92  </p>
<pre><code>- Contextual tooltip support: show name of DSP parameter
</code></pre>

<p>  0.91  </p>
<pre><code>- Fixed: check if "no device" is selected (initial state)
</code></pre>

<p>  0.90  </p>
<pre><code>- Check group sizes when building application
- Various bug fixes
</code></pre>

<p>  0.81  </p>
<pre><code>- First release
</code></pre>


</p>


<h2><a href="#Functions">Functions</a></h2>
<table class="function_list">
	<tr>
	<td class="name" nowrap><a href="#__init">__init (VarArg)</a></td>
	<td class="summary">Constructor method</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#set_parameter">set_parameter (control_index, value, skip_event)</a></td>
	<td class="summary">parameter value changed from Renoise</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#update">update ()</a></td>
	<td class="summary">update: set all controls to current values from renoise</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_build_app">_build_app ()</a></td>
	<td class="summary">inherited from Application</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_set_selected_device_index">_set_selected_device_index (idx)</a></td>
	<td class="summary">set device index, will only succeed when device exist</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_selected_device">_get_selected_device ()</a></td>
	<td class="summary">return the currently selected device (can be nil)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_update_prev_next_device_buttons">_update_prev_next_device_buttons (device_idx)</a></td>
	<td class="summary">update display for prev/next device-navigation buttons</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_update_prev_next_preset_buttons">_update_prev_next_preset_buttons (device_idx)</a></td>
	<td class="summary">update display for prev/next device-preset buttons</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#start_app">start_app ()</a></td>
	<td class="summary">inherited from Application</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_parameter_by_index">_get_parameter_by_index (idx)</a></td>
	<td class="summary">get specific effect parameter from current parameter-set</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_next_device_index">_get_next_device_index (idx)</a></td>
	<td class="summary">obtain next device index (supports parameter subsets)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_previous_device_index">_get_previous_device_index (idx)</a></td>
	<td class="summary">obtain previous device index (supports parameter subsets)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_device_index_by_ctrl">_get_device_index_by_ctrl (idx)</a></td>
	<td class="summary">obtain actual device index by specifying the control index
 (useful when dealing with parameter subsets)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_ctrl_index_by_device">_get_ctrl_index_by_device (idx)</a></td>
	<td class="summary">obtain control index by specifying the actual device index
 (useful when dealing with parameter subsets)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#on_new_document">on_new_document ()</a></td>
	<td class="summary">inherited from Application</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_modify_ceiling">_modify_ceiling (obj, prm)</a></td>
	<td class="summary">in grid mode, when encountering a quantized parameter that
 has a larger range than the number of buttons we lower the ceiling
 for the slider, so only the 'settable' range is displayed
 (called when modifying and attaching parameter)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_quant_max">_get_quant_max (prm)</a></td>
	<td class="summary">in non-grid mode, if the parameters is quantized and has a range of 255,
 we provide the 7-bit value as maximum - otherwise, we'd only be able to
 access every second value</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_normalized_value_to_parameter_value">_normalized_value_to_parameter_value (parameter, value)</a></td>
	<td class="summary">convert a [0-1] value to the given parameter value-range</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_parameter_value_to_normalized_value">_parameter_value_to_normalized_value (parameter, value)</a></td>
	<td class="summary">convert a parameter value to a [0-1] value</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#on_idle">on_idle ()</a></td>
	<td class="summary">inherited from Application</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_define_parameters">_define_parameters ()</a></td>
	<td class="summary">update the current parameter set
 (updates Effect.<em>num</em>devices)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_get_num_devices">_get_num_devices ()</a></td>
	<td class="summary">update the number of devices in the current parameter set
 (updates Effect.<em>num</em>devices)</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#update_param_page">update_param_page ()</a></td>
	<td class="summary">update display of the parameter navigation buttons</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_update_record_mode">_update_record_mode ()</a></td>
	<td class="summary">update display of the record mode</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_attach_to_song">_attach_to_song ()</a></td>
	<td class="summary">adds notifiers to song
 invoked when a new document becomes available</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_attach_to_track_devices">_attach_to_track_devices (track, new_song)</a></td>
	<td class="summary">attach notifier methods to devices &amp; parameters...</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_attach_to_parameters">_attach_to_parameters (new_song)</a></td>
	<td class="summary">detect when a parameter set has changed</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#_remove_notifiers">_remove_notifiers (new_song, observables)</a></td>
	<td class="summary">detach all previously attached notifiers first
 but don't even try to detach when a new song arrived.</td>
	</tr>
</table>
<h2><a href="#Fields">Fields</a></h2>
<table class="function_list">
	<tr>
	<td class="name" nowrap><a href="#self._slider_group_size">self._slider_group_size</a></td>
	<td class="summary">(int) the number of controls assigned as sliders</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self._slider_max_size">self._slider_max_size</a></td>
	<td class="summary">(int or nil) the maximum size of a slider</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self._slider_grid_mode">self._slider_grid_mode</a></td>
	<td class="summary">(bool) true if sliders are in grid mode</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self._parameter_set">self._parameter_set</a></td>
	<td class="summary">
<p>(table) indexed table, each entry contains:</p>
<pre><code>device_index (int)
ref (renoise.DeviceParameter)
</code></pre>
</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self._num_devices">self._num_devices</a></td>
	<td class="summary">(int) how many devices are included in our parameter set?</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self._parameter_offset">self._parameter_offset</a></td>
	<td class="summary">(int) offset of the whole parameter mapping, controlled by the page navigator</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self._parameter_observables">self._parameter_observables</a></td>
	<td class="summary">list of parameters we are currently listening to</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self.automation">self.automation</a></td>
	<td class="summary">(<a href="../modules/Duplex.Automation.html#">Duplex.Automation</a>) used for recording movements</td>
	</tr>
	<tr>
	<td class="name" nowrap><a href="#self._record_mode">self._record_mode</a></td>
	<td class="summary">(bool) set while recording automation</td>
	</tr>
</table>

<br/>
<br/>


    <h2><a name="Functions"></a>Functions</h2>
    <dl class="function">
    <dt>
    <a name = "__init"></a>
    <strong>__init (VarArg)</strong>
    </dt>
    <dd>
    Constructor method


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">VarArg</span>
        )
        </li>
    </ul>



    <h3>See also:</h3>
    <ul>
         <a href="../modules/Duplex.Application.html"></a>
    </ul>


</dd>
    <dt>
    <a name = "set_parameter"></a>
    <strong>set_parameter (control_index, value, skip_event)</strong>
    </dt>
    <dd>
    parameter value changed from Renoise


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">control_index</span>
         (int)
        </li>
        <li><span class="parameter">value</span>
         (number) <em>mostly</em> between 0 and 1
        </li>
        <li><span class="parameter">skip_event</span>
         (bool) do not trigger event
        </li>
    </ul>





</dd>
    <dt>
    <a name = "update"></a>
    <strong>update ()</strong>
    </dt>
    <dd>
    update: set all controls to current values from renoise







</dd>
    <dt>
    <a name = "_build_app"></a>
    <strong>_build_app ()</strong>
    </dt>
    <dd>
    inherited from Application



    <h3>Returns:</h3>
    <ol>

        bool
    </ol>


    <h3>See also:</h3>
    <ul>
         <a href="../modules/Duplex.Application.html#_build_app">Duplex.Application._build_app</a>
    </ul>


</dd>
    <dt>
    <a name = "_set_selected_device_index"></a>
    <strong>_set_selected_device_index (idx)</strong>
    </dt>
    <dd>
    set device index, will only succeed when device exist


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">idx</span>
         (int)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "_get_selected_device"></a>
    <strong>_get_selected_device ()</strong>
    </dt>
    <dd>
    return the currently selected device (can be nil)



    <h3>Returns:</h3>
    <ol>

        renoise.AudioDevice
    </ol>




</dd>
    <dt>
    <a name = "_update_prev_next_device_buttons"></a>
    <strong>_update_prev_next_device_buttons (device_idx)</strong>
    </dt>
    <dd>
    update display for prev/next device-navigation buttons


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">device_idx</span>
         (int)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "_update_prev_next_preset_buttons"></a>
    <strong>_update_prev_next_preset_buttons (device_idx)</strong>
    </dt>
    <dd>
    update display for prev/next device-preset buttons


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">device_idx</span>
         (int)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "start_app"></a>
    <strong>start_app ()</strong>
    </dt>
    <dd>
    inherited from Application



    <h3>Returns:</h3>
    <ol>

        bool or nil
    </ol>


    <h3>See also:</h3>
    <ul>
         <a href="../modules/Duplex.Application.html#start_app">Duplex.Application.start_app</a>
    </ul>


</dd>
    <dt>
    <a name = "_get_parameter_by_index"></a>
    <strong>_get_parameter_by_index (idx)</strong>
    </dt>
    <dd>
    get specific effect parameter from current parameter-set


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">idx</span>
         (int)
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        renoise.DeviceParameter
    </ol>




</dd>
    <dt>
    <a name = "_get_next_device_index"></a>
    <strong>_get_next_device_index (idx)</strong>
    </dt>
    <dd>
    obtain next device index (supports parameter subsets)


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">idx</span>
         (int)
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        int
    </ol>




</dd>
    <dt>
    <a name = "_get_previous_device_index"></a>
    <strong>_get_previous_device_index (idx)</strong>
    </dt>
    <dd>
    obtain previous device index (supports parameter subsets)


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">idx</span>
         (int)
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        int
    </ol>




</dd>
    <dt>
    <a name = "_get_device_index_by_ctrl"></a>
    <strong>_get_device_index_by_ctrl (idx)</strong>
    </dt>
    <dd>
    obtain actual device index by specifying the control index
 (useful when dealing with parameter subsets)


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">idx</span>
         (int)
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        int
    </ol>




</dd>
    <dt>
    <a name = "_get_ctrl_index_by_device"></a>
    <strong>_get_ctrl_index_by_device (idx)</strong>
    </dt>
    <dd>
    obtain control index by specifying the actual device index
 (useful when dealing with parameter subsets)


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">idx</span>
         (int)
        </li>
    </ul>

    <h3>Returns:</h3>
    <ol>

        int
    </ol>




</dd>
    <dt>
    <a name = "on_new_document"></a>
    <strong>on_new_document ()</strong>
    </dt>
    <dd>
    inherited from Application





    <h3>See also:</h3>
    <ul>
         <a href="../modules/Duplex.Application.html#on_new_document">Duplex.Application.on_new_document</a>
    </ul>


</dd>
    <dt>
    <a name = "_modify_ceiling"></a>
    <strong>_modify_ceiling (obj, prm)</strong>
    </dt>
    <dd>
    in grid mode, when encountering a quantized parameter that
 has a larger range than the number of buttons we lower the ceiling
 for the slider, so only the 'settable' range is displayed
 (called when modifying and attaching parameter)


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">obj</span>
         (<a href="../modules/Duplex.UISlider.html#">Duplex.UISlider</a>)
        </li>
        <li><span class="parameter">prm</span>
         (renoise.DeviceParameter)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "_get_quant_max"></a>
    <strong>_get_quant_max (prm)</strong>
    </dt>
    <dd>
    in non-grid mode, if the parameters is quantized and has a range of 255,
 we provide the 7-bit value as maximum - otherwise, we'd only be able to
 access every second value


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">prm</span>
         (renoise.DeviceParameter)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "_normalized_value_to_parameter_value"></a>
    <strong>_normalized_value_to_parameter_value (parameter, value)</strong>
    </dt>
    <dd>
    convert a [0-1] value to the given parameter value-range


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">parameter</span>
         (renoise.DeviceParameter)
        </li>
        <li><span class="parameter">value</span>
         (number)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "_parameter_value_to_normalized_value"></a>
    <strong>_parameter_value_to_normalized_value (parameter, value)</strong>
    </dt>
    <dd>
    convert a parameter value to a [0-1] value


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">parameter</span>
         (renoise.DeviceParameter)
        </li>
        <li><span class="parameter">value</span>
         (number)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "on_idle"></a>
    <strong>on_idle ()</strong>
    </dt>
    <dd>
    inherited from Application





    <h3>See also:</h3>
    <ul>
         <a href="../modules/Duplex.Application.html#on_idle">Duplex.Application.on_idle</a>
    </ul>


</dd>
    <dt>
    <a name = "_define_parameters"></a>
    <strong>_define_parameters ()</strong>
    </dt>
    <dd>
    update the current parameter set
 (updates Effect.<em>num</em>devices)







</dd>
    <dt>
    <a name = "_get_num_devices"></a>
    <strong>_get_num_devices ()</strong>
    </dt>
    <dd>
    update the number of devices in the current parameter set
 (updates Effect.<em>num</em>devices)







</dd>
    <dt>
    <a name = "update_param_page"></a>
    <strong>update_param_page ()</strong>
    </dt>
    <dd>
    update display of the parameter navigation buttons







</dd>
    <dt>
    <a name = "_update_record_mode"></a>
    <strong>_update_record_mode ()</strong>
    </dt>
    <dd>
    update display of the record mode







</dd>
    <dt>
    <a name = "_attach_to_song"></a>
    <strong>_attach_to_song ()</strong>
    </dt>
    <dd>
    adds notifiers to song
 invoked when a new document becomes available







</dd>
    <dt>
    <a name = "_attach_to_track_devices"></a>
    <strong>_attach_to_track_devices (track, new_song)</strong>
    </dt>
    <dd>
    attach notifier methods to devices &amp; parameters...


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">track</span>
         (renoise.Track)
        </li>
        <li><span class="parameter">new_song</span>
         (bool)
        </li>
    </ul>





</dd>
    <dt>
    <a name = "_attach_to_parameters"></a>
    <strong>_attach_to_parameters (new_song)</strong>
    </dt>
    <dd>
    detect when a parameter set has changed


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">new_song</span>
         (bool) true to leave existing notifiers alone
        </li>
    </ul>





</dd>
    <dt>
    <a name = "_remove_notifiers"></a>
    <strong>_remove_notifiers (new_song, observables)</strong>
    </dt>
    <dd>
    detach all previously attached notifiers first
 but don't even try to detach when a new song arrived.  old observables
 will no longer be alive then...


    <h3>Parameters:</h3>
    <ul>
        <li><span class="parameter">new_song</span>
         (bool), true to leave existing notifiers alone
        </li>
        <li><span class="parameter">observables</span>
         (table), list of observables
        </li>
    </ul>





</dd>
</dl>
    <h2><a name="Fields"></a>Fields</h2>
    <dl class="function">
    <dt>
    <a name = "self._slider_group_size"></a>
    <strong>self._slider_group_size</strong>
    </dt>
    <dd>
    (int) the number of controls assigned as sliders







</dd>
    <dt>
    <a name = "self._slider_max_size"></a>
    <strong>self._slider_max_size</strong>
    </dt>
    <dd>
    (int or nil) the maximum size of a slider







</dd>
    <dt>
    <a name = "self._slider_grid_mode"></a>
    <strong>self._slider_grid_mode</strong>
    </dt>
    <dd>
    (bool) true if sliders are in grid mode







</dd>
    <dt>
    <a name = "self._parameter_set"></a>
    <strong>self._parameter_set</strong>
    </dt>
    <dd>

<p>(table) indexed table, each entry contains:</p>
<pre><code>device_index (int)
ref (renoise.DeviceParameter)
</code></pre>








</dd>
    <dt>
    <a name = "self._num_devices"></a>
    <strong>self._num_devices</strong>
    </dt>
    <dd>
    (int) how many devices are included in our parameter set?







</dd>
    <dt>
    <a name = "self._parameter_offset"></a>
    <strong>self._parameter_offset</strong>
    </dt>
    <dd>
    (int) offset of the whole parameter mapping, controlled by the page navigator







</dd>
    <dt>
    <a name = "self._parameter_observables"></a>
    <strong>self._parameter_observables</strong>
    </dt>
    <dd>
    list of parameters we are currently listening to







</dd>
    <dt>
    <a name = "self.automation"></a>
    <strong>self.automation</strong>
    </dt>
    <dd>
    (<a href="../modules/Duplex.Automation.html#">Duplex.Automation</a>) used for recording movements







</dd>
    <dt>
    <a name = "self._record_mode"></a>
    <strong>self._record_mode</strong>
    </dt>
    <dd>
    (bool) set while recording automation







</dd>
</dl>


</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>
